<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Caffe: caffe::LSTMLayer&lt; Dtype &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Caffe
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespacecaffe.html">caffe</a></li><li class="navelem"><a class="el" href="classcaffe_1_1LSTMLayer.html">LSTMLayer</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="classcaffe_1_1LSTMLayer-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">caffe::LSTMLayer&lt; Dtype &gt; Class Template Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Processes sequential inputs using a "Long Short-Term Memory" (LSTM) [1] style recurrent neural network (RNN). Implemented by unrolling the LSTM computation through time.  
 <a href="classcaffe_1_1LSTMLayer.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="lstm__layer_8hpp_source.html">lstm_layer.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for caffe::LSTMLayer&lt; Dtype &gt;:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classcaffe_1_1LSTMLayer.png" usemap="#caffe::LSTMLayer_3C_20Dtype_20_3E_map" alt=""/>
  <map id="caffe::LSTMLayer_3C_20Dtype_20_3E_map" name="caffe::LSTMLayer_3C_20Dtype_20_3E_map">
<area href="classcaffe_1_1RecurrentLayer.html" title="An abstract class for implementing recurrent behavior inside of an unrolled network. This Layer type cannot be instantiated – instead, you should use one of its implementations which defines the recurrent architecture, such as RNNLayer or LSTMLayer. " alt="caffe::RecurrentLayer&lt; Dtype &gt;" shape="rect" coords="0,56,193,80"/>
<area href="classcaffe_1_1Layer.html" title="An interface for the units of computation which can be composed into a Net. " alt="caffe::Layer&lt; Dtype &gt;" shape="rect" coords="0,0,193,24"/>
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:abcf1a46aef1f25b7a78d13dc7e34f13b"><td class="memItemLeft" align="right" valign="top"><a id="abcf1a46aef1f25b7a78d13dc7e34f13b"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>LSTMLayer</b> (const LayerParameter &amp;param)</td></tr>
<tr class="separator:abcf1a46aef1f25b7a78d13dc7e34f13b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a971791d82dee1ec9cdd0625ee1579e22"><td class="memItemLeft" align="right" valign="top"><a id="a971791d82dee1ec9cdd0625ee1579e22"></a>
virtual const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1LSTMLayer.html#a971791d82dee1ec9cdd0625ee1579e22">type</a> () const</td></tr>
<tr class="memdesc:a971791d82dee1ec9cdd0625ee1579e22"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the layer type. <br /></td></tr>
<tr class="separator:a971791d82dee1ec9cdd0625ee1579e22"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classcaffe_1_1RecurrentLayer"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcaffe_1_1RecurrentLayer')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a3f02919dbb32c07c89bfda4ea68c09df inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a3f02919dbb32c07c89bfda4ea68c09df"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>RecurrentLayer</b> (const LayerParameter &amp;param)</td></tr>
<tr class="separator:a3f02919dbb32c07c89bfda4ea68c09df inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4eec13bfbe23b1e3eb2bbc4652bd6952 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a4eec13bfbe23b1e3eb2bbc4652bd6952">LayerSetUp</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:a4eec13bfbe23b1e3eb2bbc4652bd6952 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Does layer-specific setup: your layer should implement this function as well as Reshape.  <a href="classcaffe_1_1RecurrentLayer.html#a4eec13bfbe23b1e3eb2bbc4652bd6952">More...</a><br /></td></tr>
<tr class="separator:a4eec13bfbe23b1e3eb2bbc4652bd6952 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba6011a9cbb18e38a8596aa5dbb44723 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#aba6011a9cbb18e38a8596aa5dbb44723">Reshape</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:aba6011a9cbb18e38a8596aa5dbb44723 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adjust the shapes of top blobs and internal buffers to accommodate the shapes of the bottom blobs.  <a href="classcaffe_1_1RecurrentLayer.html#aba6011a9cbb18e38a8596aa5dbb44723">More...</a><br /></td></tr>
<tr class="separator:aba6011a9cbb18e38a8596aa5dbb44723 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f0bf24a571da40f490b9b78a51d9393 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a9f0bf24a571da40f490b9b78a51d9393"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>Reset</b> ()</td></tr>
<tr class="separator:a9f0bf24a571da40f490b9b78a51d9393 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac31b705bc02d333ae768f7c2184fbfae inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#ac31b705bc02d333ae768f7c2184fbfae">MinBottomBlobs</a> () const</td></tr>
<tr class="memdesc:ac31b705bc02d333ae768f7c2184fbfae inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the minimum number of bottom blobs required by the layer, or -1 if no minimum number is required.  <a href="classcaffe_1_1RecurrentLayer.html#ac31b705bc02d333ae768f7c2184fbfae">More...</a><br /></td></tr>
<tr class="separator:ac31b705bc02d333ae768f7c2184fbfae inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a983e1ead91884f9d2049a3000254961c inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a983e1ead91884f9d2049a3000254961c">MaxBottomBlobs</a> () const</td></tr>
<tr class="memdesc:a983e1ead91884f9d2049a3000254961c inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the maximum number of bottom blobs required by the layer, or -1 if no maximum number is required.  <a href="classcaffe_1_1RecurrentLayer.html#a983e1ead91884f9d2049a3000254961c">More...</a><br /></td></tr>
<tr class="separator:a983e1ead91884f9d2049a3000254961c inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4cb9032f0942c0fef5f6c7094c7b2ab8 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a4cb9032f0942c0fef5f6c7094c7b2ab8">ExactNumTopBlobs</a> () const</td></tr>
<tr class="memdesc:a4cb9032f0942c0fef5f6c7094c7b2ab8 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the exact number of top blobs required by the layer, or -1 if no exact number is required.  <a href="classcaffe_1_1RecurrentLayer.html#a4cb9032f0942c0fef5f6c7094c7b2ab8">More...</a><br /></td></tr>
<tr class="separator:a4cb9032f0942c0fef5f6c7094c7b2ab8 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d91610cc8b9615a1db4f07fe5590a37 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a8d91610cc8b9615a1db4f07fe5590a37">AllowForceBackward</a> (const int bottom_index) const</td></tr>
<tr class="memdesc:a8d91610cc8b9615a1db4f07fe5590a37 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return whether to allow force_backward for a given bottom blob index.  <a href="classcaffe_1_1RecurrentLayer.html#a8d91610cc8b9615a1db4f07fe5590a37">More...</a><br /></td></tr>
<tr class="separator:a8d91610cc8b9615a1db4f07fe5590a37 inherit pub_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classcaffe_1_1Layer"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcaffe_1_1Layer')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classcaffe_1_1Layer.html">caffe::Layer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a7b4e4ccea08c7b8b15acc6829d5735f6 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a7b4e4ccea08c7b8b15acc6829d5735f6">Layer</a> (const LayerParameter &amp;param)</td></tr>
<tr class="separator:a7b4e4ccea08c7b8b15acc6829d5735f6 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18d6bfdb535ab8e96a971dec4ae39a84 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a18d6bfdb535ab8e96a971dec4ae39a84">SetUp</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:a18d6bfdb535ab8e96a971dec4ae39a84 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements common layer setup functionality.  <a href="classcaffe_1_1Layer.html#a18d6bfdb535ab8e96a971dec4ae39a84">More...</a><br /></td></tr>
<tr class="separator:a18d6bfdb535ab8e96a971dec4ae39a84 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab57d272dabe8c709d2a785eebe72ca57 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">Dtype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#ab57d272dabe8c709d2a785eebe72ca57">Forward</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:ab57d272dabe8c709d2a785eebe72ca57 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the bottom blobs, compute the top blobs and the loss.  <a href="classcaffe_1_1Layer.html#ab57d272dabe8c709d2a785eebe72ca57">More...</a><br /></td></tr>
<tr class="separator:ab57d272dabe8c709d2a785eebe72ca57 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a183d343f5183a4762307f2c5e6ed1e12 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a183d343f5183a4762307f2c5e6ed1e12">Backward</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top, const vector&lt; bool &gt; &amp;propagate_down, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom)</td></tr>
<tr class="memdesc:a183d343f5183a4762307f2c5e6ed1e12 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the top blob error gradients, compute the bottom blob error gradients.  <a href="classcaffe_1_1Layer.html#a183d343f5183a4762307f2c5e6ed1e12">More...</a><br /></td></tr>
<tr class="separator:a183d343f5183a4762307f2c5e6ed1e12 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf4524ce8641a30a8a4784aee1b2b4c8 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="aaf4524ce8641a30a8a4784aee1b2b4c8"></a>
vector&lt; shared_ptr&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; &gt; &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#aaf4524ce8641a30a8a4784aee1b2b4c8">blobs</a> ()</td></tr>
<tr class="memdesc:aaf4524ce8641a30a8a4784aee1b2b4c8 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the vector of learnable parameter blobs. <br /></td></tr>
<tr class="separator:aaf4524ce8641a30a8a4784aee1b2b4c8 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adff82274f146e2b6922d0ebac2aaf215 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="adff82274f146e2b6922d0ebac2aaf215"></a>
const LayerParameter &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#adff82274f146e2b6922d0ebac2aaf215">layer_param</a> () const</td></tr>
<tr class="memdesc:adff82274f146e2b6922d0ebac2aaf215 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the layer parameter. <br /></td></tr>
<tr class="separator:adff82274f146e2b6922d0ebac2aaf215 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a1754828dda22cc8daa2f63377f3579 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a4a1754828dda22cc8daa2f63377f3579"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a4a1754828dda22cc8daa2f63377f3579">ToProto</a> (LayerParameter *param, bool write_diff=false)</td></tr>
<tr class="memdesc:a4a1754828dda22cc8daa2f63377f3579 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the layer parameter to a protocol buffer. <br /></td></tr>
<tr class="separator:a4a1754828dda22cc8daa2f63377f3579 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a899410336f30821644c8bd6c69a070c9 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a899410336f30821644c8bd6c69a070c9"></a>
Dtype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a899410336f30821644c8bd6c69a070c9">loss</a> (const int top_index) const</td></tr>
<tr class="memdesc:a899410336f30821644c8bd6c69a070c9 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the scalar loss associated with a top blob at a given index. <br /></td></tr>
<tr class="separator:a899410336f30821644c8bd6c69a070c9 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a899b09f4b91ada8545b3a43ee91e0d69 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a899b09f4b91ada8545b3a43ee91e0d69"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a899b09f4b91ada8545b3a43ee91e0d69">set_loss</a> (const int top_index, const Dtype value)</td></tr>
<tr class="memdesc:a899b09f4b91ada8545b3a43ee91e0d69 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the loss associated with a top blob at a given index. <br /></td></tr>
<tr class="separator:a899b09f4b91ada8545b3a43ee91e0d69 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e5ee0494d85f5f55fc4396537cbc60f inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a8e5ee0494d85f5f55fc4396537cbc60f">ExactNumBottomBlobs</a> () const</td></tr>
<tr class="memdesc:a8e5ee0494d85f5f55fc4396537cbc60f inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the exact number of bottom blobs required by the layer, or -1 if no exact number is required.  <a href="classcaffe_1_1Layer.html#a8e5ee0494d85f5f55fc4396537cbc60f">More...</a><br /></td></tr>
<tr class="separator:a8e5ee0494d85f5f55fc4396537cbc60f inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9e4c8d642e413948b131d851a8462a4 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#ab9e4c8d642e413948b131d851a8462a4">MinTopBlobs</a> () const</td></tr>
<tr class="memdesc:ab9e4c8d642e413948b131d851a8462a4 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the minimum number of top blobs required by the layer, or -1 if no minimum number is required.  <a href="classcaffe_1_1Layer.html#ab9e4c8d642e413948b131d851a8462a4">More...</a><br /></td></tr>
<tr class="separator:ab9e4c8d642e413948b131d851a8462a4 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6c03df0b6e40e776c94001e19994a2e inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#ac6c03df0b6e40e776c94001e19994a2e">MaxTopBlobs</a> () const</td></tr>
<tr class="memdesc:ac6c03df0b6e40e776c94001e19994a2e inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the maximum number of top blobs required by the layer, or -1 if no maximum number is required.  <a href="classcaffe_1_1Layer.html#ac6c03df0b6e40e776c94001e19994a2e">More...</a><br /></td></tr>
<tr class="separator:ac6c03df0b6e40e776c94001e19994a2e inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af452a938bc7596f9b5e9900c8dc4ab3d inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#af452a938bc7596f9b5e9900c8dc4ab3d">EqualNumBottomTopBlobs</a> () const</td></tr>
<tr class="memdesc:af452a938bc7596f9b5e9900c8dc4ab3d inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if the layer requires an equal number of bottom and top blobs.  <a href="classcaffe_1_1Layer.html#af452a938bc7596f9b5e9900c8dc4ab3d">More...</a><br /></td></tr>
<tr class="separator:af452a938bc7596f9b5e9900c8dc4ab3d inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50130669e230a168d1f8fbbb8171f054 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a50130669e230a168d1f8fbbb8171f054">AutoTopBlobs</a> () const</td></tr>
<tr class="memdesc:a50130669e230a168d1f8fbbb8171f054 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return whether "anonymous" top blobs are created automatically by the layer.  <a href="classcaffe_1_1Layer.html#a50130669e230a168d1f8fbbb8171f054">More...</a><br /></td></tr>
<tr class="separator:a50130669e230a168d1f8fbbb8171f054 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a3708013b0231e71d725252e10ce6e3 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a1a3708013b0231e71d725252e10ce6e3">param_propagate_down</a> (const int param_id)</td></tr>
<tr class="memdesc:a1a3708013b0231e71d725252e10ce6e3 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specifies whether the layer should compute gradients w.r.t. a parameter at a particular index given by param_id.  <a href="classcaffe_1_1Layer.html#a1a3708013b0231e71d725252e10ce6e3">More...</a><br /></td></tr>
<tr class="separator:a1a3708013b0231e71d725252e10ce6e3 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a6fcb843803ed556f0a69cc2864379b inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a9a6fcb843803ed556f0a69cc2864379b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a9a6fcb843803ed556f0a69cc2864379b">set_param_propagate_down</a> (const int param_id, const bool value)</td></tr>
<tr class="memdesc:a9a6fcb843803ed556f0a69cc2864379b inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets whether the layer should compute gradients w.r.t. a parameter at a particular index given by param_id. <br /></td></tr>
<tr class="separator:a9a6fcb843803ed556f0a69cc2864379b inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a66285fd55798aa17b8d5d0b7f30f8346"><td class="memItemLeft" align="right" valign="top"><a id="a66285fd55798aa17b8d5d0b7f30f8346"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1LSTMLayer.html#a66285fd55798aa17b8d5d0b7f30f8346">FillUnrolledNet</a> (NetParameter *net_param) const</td></tr>
<tr class="memdesc:a66285fd55798aa17b8d5d0b7f30f8346"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills net_param with the recurrent network architecture. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:a66285fd55798aa17b8d5d0b7f30f8346"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03c6f191bd5a314981514b9bbd3ce450"><td class="memItemLeft" align="right" valign="top"><a id="a03c6f191bd5a314981514b9bbd3ce450"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1LSTMLayer.html#a03c6f191bd5a314981514b9bbd3ce450">RecurrentInputBlobNames</a> (vector&lt; string &gt; *names) const</td></tr>
<tr class="memdesc:a03c6f191bd5a314981514b9bbd3ce450"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills names with the names of the 0th timestep recurrent input <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a>&amp;s. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:a03c6f191bd5a314981514b9bbd3ce450"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ea6a5c2801b1463604bc67c4dbf1df1"><td class="memItemLeft" align="right" valign="top"><a id="a1ea6a5c2801b1463604bc67c4dbf1df1"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1LSTMLayer.html#a1ea6a5c2801b1463604bc67c4dbf1df1">RecurrentOutputBlobNames</a> (vector&lt; string &gt; *names) const</td></tr>
<tr class="memdesc:a1ea6a5c2801b1463604bc67c4dbf1df1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills names with the names of the Tth timestep recurrent output <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a>&amp;s. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:a1ea6a5c2801b1463604bc67c4dbf1df1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3978704db58d6f2a43d3cfccec9853b"><td class="memItemLeft" align="right" valign="top"><a id="ab3978704db58d6f2a43d3cfccec9853b"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1LSTMLayer.html#ab3978704db58d6f2a43d3cfccec9853b">RecurrentInputShapes</a> (vector&lt; BlobShape &gt; *shapes) const</td></tr>
<tr class="memdesc:ab3978704db58d6f2a43d3cfccec9853b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills shapes with the shapes of the recurrent input <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a>&amp;s. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:ab3978704db58d6f2a43d3cfccec9853b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86acb620f5a10c6caa2661398e0b4f5a"><td class="memItemLeft" align="right" valign="top"><a id="a86acb620f5a10c6caa2661398e0b4f5a"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1LSTMLayer.html#a86acb620f5a10c6caa2661398e0b4f5a">OutputBlobNames</a> (vector&lt; string &gt; *names) const</td></tr>
<tr class="memdesc:a86acb620f5a10c6caa2661398e0b4f5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills names with the names of the output blobs, concatenated across all timesteps. Should return a name for each top <a class="el" href="classcaffe_1_1Blob.html" title="A wrapper around SyncedMemory holders serving as the basic computational unit through which Layers...">Blob</a>. Subclasses should define this &ndash; see <a class="el" href="classcaffe_1_1RNNLayer.html" title="Processes time-varying inputs using a simple recurrent neural network (RNN). Implemented as a network...">RNNLayer</a> and <a class="el" href="classcaffe_1_1LSTMLayer.html" title="Processes sequential inputs using a &quot;Long Short-Term Memory&quot; (LSTM) [1] style recurrent neural networ...">LSTMLayer</a> for examples. <br /></td></tr>
<tr class="separator:a86acb620f5a10c6caa2661398e0b4f5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classcaffe_1_1RecurrentLayer"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classcaffe_1_1RecurrentLayer')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a9f0e34d7534fac027c640e66f55a18d2 inherit pro_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a9f0e34d7534fac027c640e66f55a18d2">Forward_cpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="separator:a9f0e34d7534fac027c640e66f55a18d2 inherit pro_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb4cdbb38b24d2a2ccb14cebc4e1018b inherit pro_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="afb4cdbb38b24d2a2ccb14cebc4e1018b"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#afb4cdbb38b24d2a2ccb14cebc4e1018b">Forward_gpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:afb4cdbb38b24d2a2ccb14cebc4e1018b inherit pro_methods_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the GPU device, compute the layer output. Fall back to <a class="el" href="classcaffe_1_1RecurrentLayer.html#a9f0e34d7534fac027c640e66f55a18d2">Forward_cpu()</a> if unavailable. <br /></td></tr>
<tr class="separator:afb4cdbb38b24d2a2ccb14cebc4e1018b inherit pro_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a634f73d33c81cc8f8486659998ed45c6 inherit pro_methods_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a634f73d33c81cc8f8486659998ed45c6"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a634f73d33c81cc8f8486659998ed45c6">Backward_cpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top, const vector&lt; bool &gt; &amp;propagate_down, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom)</td></tr>
<tr class="memdesc:a634f73d33c81cc8f8486659998ed45c6 inherit pro_methods_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the CPU device, compute the gradients for any parameters and for the bottom blobs if propagate_down is true. <br /></td></tr>
<tr class="separator:a634f73d33c81cc8f8486659998ed45c6 inherit pro_methods_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classcaffe_1_1Layer"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classcaffe_1_1Layer')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classcaffe_1_1Layer.html">caffe::Layer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a6faee52af6250a38d1b879008257f5a7 inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a6faee52af6250a38d1b879008257f5a7"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a6faee52af6250a38d1b879008257f5a7">Backward_gpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top, const vector&lt; bool &gt; &amp;propagate_down, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom)</td></tr>
<tr class="memdesc:a6faee52af6250a38d1b879008257f5a7 inherit pro_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the GPU device, compute the gradients for any parameters and for the bottom blobs if propagate_down is true. Fall back to <a class="el" href="classcaffe_1_1Layer.html#a75c9b2a321dc713e0eaef530d02dc37f" title="Using the CPU device, compute the gradients for any parameters and for the bottom blobs if propagate_...">Backward_cpu()</a> if unavailable. <br /></td></tr>
<tr class="separator:a6faee52af6250a38d1b879008257f5a7 inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55c8036130225fbc874a986bdf4b27e2 inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a55c8036130225fbc874a986bdf4b27e2">CheckBlobCounts</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="separator:a55c8036130225fbc874a986bdf4b27e2 inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04eb2a3d1d59c64cd64c233217d5d6fc inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a04eb2a3d1d59c64cd64c233217d5d6fc">SetLossWeights</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="separator:a04eb2a3d1d59c64cd64c233217d5d6fc inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pro_attribs_classcaffe_1_1RecurrentLayer"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classcaffe_1_1RecurrentLayer')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classcaffe_1_1RecurrentLayer.html">caffe::RecurrentLayer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:aa9b6cb6658e3bc8bfdf39441e751919a inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="aa9b6cb6658e3bc8bfdf39441e751919a"></a>
shared_ptr&lt; <a class="el" href="classcaffe_1_1Net.html">Net</a>&lt; Dtype &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#aa9b6cb6658e3bc8bfdf39441e751919a">unrolled_net_</a></td></tr>
<tr class="memdesc:aa9b6cb6658e3bc8bfdf39441e751919a inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">A <a class="el" href="classcaffe_1_1Net.html" title="Connects Layers together into a directed acyclic graph (DAG) specified by a NetParameter. ">Net</a> to implement the Recurrent functionality. <br /></td></tr>
<tr class="separator:aa9b6cb6658e3bc8bfdf39441e751919a inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bf3c3a87b2a740987aec46e40717907 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a4bf3c3a87b2a740987aec46e40717907"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a4bf3c3a87b2a740987aec46e40717907">N_</a></td></tr>
<tr class="memdesc:a4bf3c3a87b2a740987aec46e40717907 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of independent streams to process simultaneously. <br /></td></tr>
<tr class="separator:a4bf3c3a87b2a740987aec46e40717907 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a02f79bca0ccde7543ecf172b328c860f inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a02f79bca0ccde7543ecf172b328c860f"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a02f79bca0ccde7543ecf172b328c860f">T_</a></td></tr>
<tr class="memdesc:a02f79bca0ccde7543ecf172b328c860f inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of timesteps in the layer's input, and the number of timesteps over which to backpropagate through time. <br /></td></tr>
<tr class="separator:a02f79bca0ccde7543ecf172b328c860f inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7da45d2f90a99fe6e4250ffa6a533d97 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a7da45d2f90a99fe6e4250ffa6a533d97"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a7da45d2f90a99fe6e4250ffa6a533d97">static_input_</a></td></tr>
<tr class="memdesc:a7da45d2f90a99fe6e4250ffa6a533d97 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the layer has a "static" input copied across all timesteps. <br /></td></tr>
<tr class="separator:a7da45d2f90a99fe6e4250ffa6a533d97 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a7a7d94ed74d4199b9d7b8445d5aadb inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a0a7a7d94ed74d4199b9d7b8445d5aadb"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#a0a7a7d94ed74d4199b9d7b8445d5aadb">last_layer_index_</a></td></tr>
<tr class="memdesc:a0a7a7d94ed74d4199b9d7b8445d5aadb inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">The last layer to run in the network. (Any later layers are losses added to force the recurrent net to do backprop.) <br /></td></tr>
<tr class="separator:a0a7a7d94ed74d4199b9d7b8445d5aadb inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abfafaacb1fece0309e750e0d307fb76e inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="abfafaacb1fece0309e750e0d307fb76e"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1RecurrentLayer.html#abfafaacb1fece0309e750e0d307fb76e">expose_hidden_</a></td></tr>
<tr class="memdesc:abfafaacb1fece0309e750e0d307fb76e inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the layer's hidden state at the first and last timesteps are layer inputs and outputs, respectively. <br /></td></tr>
<tr class="separator:abfafaacb1fece0309e750e0d307fb76e inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9da1173c6ccdb913c5a8ac8f4ca7f891 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a9da1173c6ccdb913c5a8ac8f4ca7f891"></a>
vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>recur_input_blobs_</b></td></tr>
<tr class="separator:a9da1173c6ccdb913c5a8ac8f4ca7f891 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53b1f9cd694e7dfcae00774ddfef0222 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a53b1f9cd694e7dfcae00774ddfef0222"></a>
vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>recur_output_blobs_</b></td></tr>
<tr class="separator:a53b1f9cd694e7dfcae00774ddfef0222 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0b7323dd7121854d05f85847e2f86c4 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="ae0b7323dd7121854d05f85847e2f86c4"></a>
vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt;&#160;</td><td class="memItemRight" valign="bottom"><b>output_blobs_</b></td></tr>
<tr class="separator:ae0b7323dd7121854d05f85847e2f86c4 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af32cf697eeee1edd5de1d7b359602ec2 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="af32cf697eeee1edd5de1d7b359602ec2"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&#160;</td><td class="memItemRight" valign="bottom"><b>x_input_blob_</b></td></tr>
<tr class="separator:af32cf697eeee1edd5de1d7b359602ec2 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa918e06200e98287778abc5f3d97eeb1 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="aa918e06200e98287778abc5f3d97eeb1"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&#160;</td><td class="memItemRight" valign="bottom"><b>x_static_input_blob_</b></td></tr>
<tr class="separator:aa918e06200e98287778abc5f3d97eeb1 inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b5f3118aa5a48d54fb624c04b98bd1d inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memItemLeft" align="right" valign="top"><a id="a3b5f3118aa5a48d54fb624c04b98bd1d"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&#160;</td><td class="memItemRight" valign="bottom"><b>cont_input_blob_</b></td></tr>
<tr class="separator:a3b5f3118aa5a48d54fb624c04b98bd1d inherit pro_attribs_classcaffe_1_1RecurrentLayer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classcaffe_1_1Layer"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classcaffe_1_1Layer')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classcaffe_1_1Layer.html">caffe::Layer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a7ed12bb2df25c887e41d7ea9557fc701 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">LayerParameter&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a7ed12bb2df25c887e41d7ea9557fc701">layer_param_</a></td></tr>
<tr class="separator:a7ed12bb2df25c887e41d7ea9557fc701 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d04ad7f595a82a1c811f102d68b8a19 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">Phase&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a1d04ad7f595a82a1c811f102d68b8a19">phase_</a></td></tr>
<tr class="separator:a1d04ad7f595a82a1c811f102d68b8a19 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8073fcf2c139b47eb99ce71b346b1321 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">vector&lt; shared_ptr&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a8073fcf2c139b47eb99ce71b346b1321">blobs_</a></td></tr>
<tr class="separator:a8073fcf2c139b47eb99ce71b346b1321 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd4a05def9ff3b42ad72404210613ef7 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">vector&lt; bool &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#acd4a05def9ff3b42ad72404210613ef7">param_propagate_down_</a></td></tr>
<tr class="separator:acd4a05def9ff3b42ad72404210613ef7 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6d347229a139500994e7a926c680486 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">vector&lt; Dtype &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#af6d347229a139500994e7a926c680486">loss_</a></td></tr>
<tr class="separator:af6d347229a139500994e7a926c680486 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Dtype&gt;<br />
class caffe::LSTMLayer&lt; Dtype &gt;</h3>

<p>Processes sequential inputs using a "Long Short-Term Memory" (LSTM) [1] style recurrent neural network (RNN). Implemented by unrolling the LSTM computation through time. </p>
<p>The specific architecture used in this implementation is as described in "Learning to Execute" [2], reproduced below: i_t := [ W_{hi} * h_{t-1} + W_{xi} * x_t + b_i ] f_t := [ W_{hf} * h_{t-1} + W_{xf} * x_t + b_f ] o_t := [ W_{ho} * h_{t-1} + W_{xo} * x_t + b_o ] g_t := [ W_{hg} * h_{t-1} + W_{xg} * x_t + b_g ] c_t := (f_t .* c_{t-1}) + (i_t .* g_t) h_t := o_t .* [c_t] In the implementation, the i, f, o, and g computations are performed as a single inner product.</p>
<p>Notably, this implementation lacks the "diagonal" gates, as used in the LSTM architectures described by Alex Graves [3] and others.</p>
<p>[1] Hochreiter, Sepp, and Schmidhuber, Jürgen. "Long short-term memory." Neural Computation 9, no. 8 (1997): 1735-1780.</p>
<p>[2] Zaremba, Wojciech, and Sutskever, Ilya. "Learning to execute." arXiv preprint arXiv:1410.4615 (2014).</p>
<p>[3] Graves, Alex. "Generating sequences with recurrent neural networks." arXiv preprint arXiv:1308.0850 (2013). </p>
</div><hr/>The documentation for this class was generated from the following files:<ul>
<li>include/caffe/layers/<a class="el" href="lstm__layer_8hpp_source.html">lstm_layer.hpp</a></li>
<li>src/caffe/layers/lstm_layer.cpp</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Aug 3 2017 23:11:26 for Caffe by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
